$(function(){
	'use strict';
	window.Input = function(selector) {
		var $ele
		, $error_ele
		, me = this
		, rule = {};

		this.load_validator = function () {
			var val = this.get_val();			
			this.validator = new Validator(val, rule);
		}

		this.get_val = function () {
			return $ele.val();
		}
		function init() {
			find_ele();
			parse_rule();
			me.load_validator();
			get_error_ele();
			listen();
		}
		// 事件监听
		function listen() {
			$ele.on('change', function() {
				var new_val = me.get_val();
				var valid = me.validator.is_valid(new_val);
				if(valid) {
					$error_ele.hide();
				}else {
					$error_ele.show();
				}
			});
		}
		/*查找对应错误提示元素*/
		function get_error_ele() {
			$error_ele = $(get_error_selector());
		}
		function get_error_selector() {
			return '#' + $ele.attr('id') + '-input-error';
		}
		// 解析data-rule属性成rule对象
		function parse_rule() {
			var i;
			var rule_string = $ele.data('rule');
			if(!rule_string){
				return;
			}
			var rule_arr = rule_string.split('|');
			for(i = 0; i < rule_arr.length; i++) {
				var item_str = rule_arr[i];
				var item_arr = item_str.split(':');
				rule[item_arr[0]] = JSON.parse(item_arr[1]);
			}
		}
		// 查找元素
		function find_ele() {
			if (selector instanceof jQuery) {
				$ele = selector;
			}else {
				$ele = $(selector);
			}
		}
		init();
	}
});